import matplotlib.pyplot as plt
import pandas as pd
import constant
from sqlalchemy import create_engine

"""
每日行情数据
"""

# 初始化数据库连接:
engine = create_engine(
    constant.get_db_path(),
    max_overflow=0,   # 超过连接池大小外最多创建的连接数
    pool_size=5,      # 连接池大小
    pool_timeout=30,  # 连接池中没有线程最多等待时间，否则报错
    pool_recycle=-1,  # 多久之后对连接池中的连接进行回收（重置）-1不回收
)

"""
画图
"""
plt_flag = True # 是否开启画图功能
stock_code = '603630.SH'
if plt_flag:
    sql = 'select ts_code, trade_date, `close`, pe_ttm, pb from daily_basic WHERE ts_code = "%s"' %stock_code
    df = pd.read_sql(sql, engine)
    df['trade_date'] = pd.to_datetime(df['trade_date'], format='%Y%m%d', errors='ignore')
    plt.figure("指标观察") # 生成图形后的标题
    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

    more_than_one_subplot_flag = False
    if more_than_one_subplot_flag:

        plt.subplot(221) # 设置绘图区域
        plt.title('收盘价折线图', fontsize=14)
        plt.plot(df.loc[:,'trade_date'], df.loc[:,'close'], 'b-', linewidth=1) # x轴,y轴,点或线 默认蓝线b-
        plt.ylabel('收盘价', fontsize=8)
        plt.xlabel('交易时间', fontsize=8)
        # 设置坐标轴刻度标记的大小
        plt.tick_params(axis='both', labelsize=8)

        plt.subplot(222)
        plt.title('pe拆线图', fontsize=14)
        '''
        plt.scatter(xlist, ylist, edgecolor='r', c='g', s=150)
        其中参数edgecolor表示边缘的颜色，此处设置为红色；参数c表示内部的颜色，此处设置为绿色；s表示点的大小；
        （注意：关于参数c还以如下设置c=(value1, value2, value3)，三个value取值范围0到1之间，
        分别表示红绿蓝三原色。plt.scatter(xlist,ylist, edgecolor='k',c=(1, 0, 0), s=150)见后面的图，注意区别）
        '''
        plt.scatter(df.loc[:,'trade_date'], df.loc[:,'pe_ttm'], edgecolor='r', c='r',s=0.5) # x轴,y轴,点或线 默认蓝线b-
        plt.ylabel('pe_ttm', fontsize=8)
        plt.xlabel('交易时间', fontsize=8)
        # 设置坐标轴刻度标记的大小
        plt.tick_params(axis='both', which='major',labelsize=8)

        plt.subplot(212)
        plt.title('pb拆线图', fontsize=14)
        plt.plot(df.loc[:,'trade_date'], df.loc[:,'pb'], 'k', linewidth=1) # x轴,y轴,点或线 默认蓝线b-
        plt.ylabel('pb', fontsize=8)
        plt.xlabel('交易时间', fontsize=8)
        # 设置坐标轴刻度标记的大小
        plt.tick_params(axis='both', labelsize=8)
        plt.tight_layout() #设置默认的间距，调整整体空白
        plt.subplots_adjust(wspace =0.5, hspace =0.5)#调整子图间距
    else:
        # 单图多折线
        x = df.loc[:,'trade_date']  # 点的横坐标
        k1 = df.loc[:,'close'] # 线1的纵坐标
        k2 = df.loc[:,'pe_ttm']  # 线2的纵坐标
        k3 = df.loc[:,'pb']  # 线3的纵坐标
        plt.plot(x, k1, color='r', label="收盘价", linewidth=1)
        plt.plot(x, k2, color='g', label="pe_ttm", linewidth=1)
        plt.plot(x, k3, color='k', label="pb", linewidth=1)
        plt.xlabel("时间")  # 横坐标名字
        plt.ylabel("数值")  # 纵坐标名字
        plt.legend(loc="best")  # 图例
    plt.show()
